home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / SAT 2.3.8 / Demos / StepPlatform Demo ƒ / sPlayerSprite.c < prev    next >
Text File  |  1996-05-11  |  4KB  |  147 lines

  1. /* Player sprite for the Platform test */
  2.  
  3. #include "SAT.h"
  4. #include "myPlatform.h"
  5.  
  6. #ifndef abs
  7. #define abs(x)    (x>0?x:-x)
  8. #endif
  9.  
  10. #define    PlayerHigh    64
  11. #define    PlayerSpeed    5
  12. #define    Gforce        2    //like g = 9.8 m/sec^2
  13. #define    JumpSpeed    23
  14.  
  15. FacePtr    rightFaces[4], leftFaces[4];
  16. FacePtr    fallFace[2] ;
  17.  
  18. void    HandleKeys(PlSpritePtr me);
  19.  
  20. void InitPlayerSprite()
  21. {
  22.     int i;
  23.     
  24.     for(i=0;i<=3;i++){
  25.         leftFaces[i] = SATGetFace(128 + i);
  26.         rightFaces[i] = SATGetFace(132 + i);
  27.     }
  28.     for(i=0;i<=1;i++)
  29.         fallFace[i] = SATGetFace(136 + i);
  30. }
  31.  
  32. pascal void HandlePlayerSprite(PlSpritePtr me)
  33. {
  34.     EventRecord    theEvent;
  35.     char            temp;
  36.     
  37.         
  38.         HandleKeys(me);
  39.         
  40.         /*  Vspeed Limit ,Acceleration and Updating V Position    */
  41.         if (me->speed.v > 30)    me->speed.v = 30;
  42.         me->speed.v += Gforce;
  43.         me->position.v += me->speed.v;
  44.         
  45.         /*    Keeping the Hero with the same speed as the HMov platform    */
  46.         if (me->action == JumpFromHMov)
  47.             me->position.h += me->speed.h;
  48.         
  49.         /*Make sure we are always visible!*/
  50.         /*************************/
  51.         if (me->position.v < 0){
  52.             me->position.v = 0;
  53.             me->speed.v = 0;
  54.         }
  55.         if(me->position.h < 0){
  56.             me->position.h = 0;
  57.             me->speed.h = 0;
  58.         }
  59.         if(me->position.v > gSAT.offSizeV - PlayerHigh) {
  60.             me->action = Stand;
  61.             me->position.v = gSAT.offSizeV - PlayerHigh;
  62.             me->speed.v=0;
  63.         }
  64.         if(me->position.h > gSAT.offSizeH - PlayerHigh){
  65.             me->position.h = gSAT.offSizeH - PlayerHigh;
  66.             me->speed.h = 0;
  67.         } 
  68.         
  69.         me->mode = abs(me->mode + 1);
  70.         me->layer = -1*(me->position.v);
  71. }
  72.  
  73. pascal void SetupPlayerSprite(PlSpritePtr me)
  74. {        
  75.         me->action = Stand;
  76.         me->mode = 0;
  77.         me->speed.h = 0;
  78.         me->kind = 1;                                  /* friend kind */
  79.         SetRect(&(me->hotRect), 12, 0, PlayerHigh-10, PlayerHigh);
  80.         me->face = fallFace[0];
  81.         me->task = (void *)&HandlePlayerSprite;
  82.         me->hitTask = &HitPlayerSprite;
  83. }
  84.  
  85. pascal void HitPlayerSprite(SpritePtr me, SpritePtr him)
  86. {
  87.  
  88. /* Hit something! We can take whatever action we need here, but in this case,
  89.      we let the other sprites decide. We could have omitted this function altogether and passed nil.*/
  90.         if(him->kind == 1){
  91.         }
  92.         else if(him->kind == 2 )
  93.         {
  94.         }
  95. }
  96.  
  97. void    HandleKeys(PlSpritePtr me)
  98. {    
  99.         //    RIGHT - Key Number 6
  100.             if (IsPressed(0x7B) || IsPressed(0x56))        /* left */
  101.             {    
  102.                 if (me->action==JumpFromHMov)
  103.                     me->position.h -= PlayerSpeed-abs(me->speed.h);
  104.                 else
  105.                     me->position.h -= PlayerSpeed;
  106.                 me->speed.h = -PlayerSpeed;
  107.                 me->face = leftFaces[(me->mode/3) & 3]; 
  108.             }
  109.         
  110.         //    LEFT    - Key Number 4
  111.             if (IsPressed(0x7C) || IsPressed(0x58))    /* right */
  112.             {    
  113.                 if (me->action==JumpFromHMov)    //stay on the platform
  114.                     me->position.h += PlayerSpeed-abs(me->speed.h);
  115.                 else
  116.                     me->position.h += PlayerSpeed;
  117.                 me->speed.h = PlayerSpeed;
  118.                 me->face = rightFaces[(me->mode/3) & 3]; //replace the face
  119.             }
  120.             
  121.         //  Not JUMP - not pushing key num 8 ,to prevent auto jumping!
  122.             if (! (IsPressed(0x7E) || IsPressed(0x5B)))
  123.                 me->JumpKey = NotPushed;
  124.                 
  125.         //     JUMP - Key Number 8             
  126.             if (IsPressed(0x7E) || IsPressed(0x5B))
  127.                 {    
  128.                     if (me->speed.v < 10) {
  129.                         if    ((me->JumpKey==NotPushed) &&((me->action!=Jump)&&(me->action!=JumpFromHMov)))    {
  130.                             me->speed.v = -JumpSpeed;
  131.                             if (me->action == StandOnHMovPlatform)    {
  132.                                 me->position.h += me->speed.h;
  133.                                 me->action=JumpFromHMov;
  134.                                 }
  135.                             else
  136.                                 me->action=Jump;
  137.                             
  138.                             me->JumpKey = Pushed;
  139.                             }
  140.                     }
  141.                 }
  142.             // Down - Key Number 2
  143.             if (IsPressed(0x7D) || IsPressed(0x54))    ;
  144.             
  145.             //         - Clear Key
  146.             if (IsPressed(0x47)) ;
  147. }